package gui;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JSplitPane;
import javax.swing.ListSelectionModel;

import java.awt.GridLayout;
import java.awt.FlowLayout;

import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JTabbedPane;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;

import javax.swing.JScrollPane;

import negocio.Sala;
import negocio.SalaControlador;

import javax.swing.border.TitledBorder;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Salas extends JFrame {

	private JPanel contentPane;
	private JLabel lblNAula;
	private JLabel lblCurso;
	private JTextField txtCantidadPC;
	private JTextField txtAula;
	private JLabel lblCapacidadMin;
	private JTextField txtCapacidadMin;
	private JButton btnBuscar;
	private JButton btnExaminar;
	private JButton btnCrear;
	private JButton btnSalir;
	private JTable table;
	private DefaultTableModel model=new DefaultTableModel();
	private JScrollPane scrollPane;
	private Salas padreAula;
	ArrayList<Sala> salas=new ArrayList<Sala>();
	private JPanel panel;
	private JPanel panel_1;
	private SalasExaminar salasExaminar = null;
	private SalasCrear salasCrear = null;
	
	public void nullSalasExaminar()
	{
		this.salasExaminar = null;
	}
	
	public void nullSalasCrear()
	{
		this.salasCrear = null;
	}

	/**
	 * Launch the application.
	 
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Aulas frame = new Aulas(null);
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	*/

	/**
	 * Create the frame.
	 */
	public Salas(ClasesCrear padreClasesCrear, Principal padre) {
		setTitle("Aulas");
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e){
				if(padre!=null)
					padre.nullaulas();
				if(padreClasesCrear!=null)
					padreClasesCrear.nullSalas();
				dispose();
			}
		});
		padreAula=this;
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(180, 180, 407, 451);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		panel_1 = new JPanel();
		panel_1.setBorder(new TitledBorder(null, "Busqueda", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panel_1.setBounds(4, 11, 384, 70);
		contentPane.add(panel_1);
		panel_1.setLayout(null);
		
		lblNAula = new JLabel(" Aula");
		lblNAula.setBounds(6, 19, 86, 14);
		panel_1.add(lblNAula);
		
		lblCurso = new JLabel("Cantidad PCs");
		lblCurso.setBounds(6, 44, 86, 14);
		panel_1.add(lblCurso);
		
		txtAula = new JTextField();
		txtAula.setBounds(102, 16, 86, 20);
		panel_1.add(txtAula);
		txtAula.setColumns(10);
		
		txtCapacidadMin = new JTextField();
		txtCapacidadMin.setBounds(291, 16, 86, 20);
		panel_1.add(txtCapacidadMin);
		txtCapacidadMin.setColumns(10);
		
		txtCantidadPC = new JTextField();
		txtCantidadPC.setBounds(102, 41, 86, 20);
		panel_1.add(txtCantidadPC);
		txtCantidadPC.setColumns(10);
		
		lblCapacidadMin = new JLabel("Capacidad Min");
		lblCapacidadMin.setBounds(198, 19, 83, 14);
		panel_1.add(lblCapacidadMin);
		
		btnBuscar = new JButton("Buscar");
		btnBuscar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				llenarTabla();
			}
		});
		btnBuscar.setBounds(198, 40, 179, 23);
		panel_1.add(btnBuscar);
		
		btnExaminar = new JButton("Examinar");
		btnExaminar.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				if(table.getSelectedRow()!=-1)
				{
					if(salasExaminar==null)
						salasExaminar=new SalasExaminar(padreAula,salas.get(table.getSelectedRow()));
					
					salasExaminar.setVisible(true);
				}
			}
		});
		
		btnExaminar.setBounds(101, 386, 89, 23);
		contentPane.add(btnExaminar);
		
		btnCrear = new JButton("Crear");
		btnCrear.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				if(salasCrear==null)
					 salasCrear = new SalasCrear(padreAula);
				salasCrear.setVisible(true);
			}
		});
		btnCrear.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
			}
		});
		btnCrear.setBounds(200, 386, 89, 23);
		contentPane.add(btnCrear);
		
		btnSalir = new JButton("Salir");
		btnSalir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(padre!=null)
					padre.nullaulas();
				if(padreClasesCrear!=null)
					padreClasesCrear.nullSalas();
				dispose();
			}
		});
		btnSalir.setBounds(299, 386, 89, 23);
		contentPane.add(btnSalir);
		
		panel = new JPanel();
		panel.setBorder(new TitledBorder(null, "Resultados de busqueda", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panel.setBounds(4, 92, 384, 290);
		contentPane.add(panel);
		panel.setLayout(null);
		
		scrollPane = new JScrollPane();
		scrollPane.setBounds(6, 16, 368, 267);
		panel.add(scrollPane);
		
		table = new JTable(){
			@Override
			public boolean isCellEditable(int row, int colum)
			{
				return false;
			}
		};
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scrollPane.setViewportView(table);
		table.setModel(model);
		llenarTabla();
	}
	
	public void llenarTabla()
	{
		this.salas=SalaControlador.getAll();
		model.setRowCount(0);
		ArrayList<String>encabezado=new ArrayList<String>();
		encabezado.add("Numero sala");
		encabezado.add("Capacidad maxima");
		encabezado.add("Cantidad de PCs");
		model.setColumnIdentifiers(encabezado.toArray());
		ArrayList<String>fila=new ArrayList<String>();
		
		filtrarPorAula(salas, txtAula);
		filtrarPorCantidadPc(salas, txtCantidadPC);
		filtrarPorCapacidad(salas, txtCapacidadMin);
		
		for(Sala s:salas)
		{
			Integer numSala=s.getNumero();
			Integer capMax=s.getCapacidad();
			Integer cantPc=s.getCantidadPCs();
			fila.add(numSala.toString());
			fila.add(capMax.toString());
			fila.add(cantPc.toString());
			model.addRow(fila.toArray());
			fila.removeAll(fila);
		}
		table.setModel(model);
	}

	private void filtrarPorCapacidad(ArrayList<Sala> salas, JTextField txtCapacidadMin)
	{
		if(txtCapacidadMin.getText().equals(""))
		{
			return;
		}
		else
		{
			for(int i = 0; i<salas.size();)
			{
				Integer aux=Integer.parseInt(txtCapacidadMin.getText());
				if(!(salas.get(i).getCapacidad() >= aux))
				{
					salas.remove(i);
				}
				else
					i++;
			}
		}
	}

	public void filtrarPorCantidadPc(ArrayList<Sala> salas, JTextField txtCantidadPC)
	{
		if(txtCantidadPC.getText().equals(""))
		{
			return;
		}
		else
		{
			for(int i = 0; i<salas.size();)
			{
				Integer aux=Integer.parseInt(txtCantidadPC.getText());
				if(!(salas.get(i).getCantidadPCs() >= aux))
				{
					salas.remove(i);
				}
				else
					i++;
			}
		}
	}

	public void filtrarPorAula(ArrayList<Sala> salas, JTextField txtAula)
	{
		if(txtAula.getText().equals(""))
		{
			return;
		}
		else
		{
			for(int i = 0; i<salas.size();)
			{
				Integer aux=Integer.parseInt(txtAula.getText());
				if(!(salas.get(i).getNumero() == aux))
				{
					salas.remove(i);
				}
				else
					i++;
			}
		}
	}
	
	
	
	
	
	
	
	
	
}